package br.com.aerusc.gui.panel;

import java.util.logging.Logger;

import br.com.aerusc.entity.Jogador;
import br.com.aerusc.filters.FiltroJogador;
import br.com.aerusc.gui.components.RootComponents;
import br.com.aerusc.persistence.dao.JogadorDAO;

import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.util.BeanContainer;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;

public class PanelListagemJogadores extends Panel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final String COMMON_FIELD_WIDTH = "16em";
	private static final Logger log = Logger.getLogger(PanelListagemJogadores.class.getName());
	private Table tableJogadores = new Table("Jogadores");
	private TextField fieldNome;
	private HorizontalLayout horizontalLayout;
	private BeanContainer<Long, Jogador> beansJogador;
	private Button buttonFiltrar;

	public PanelListagemJogadores() {
		horizontalLayout = new HorizontalLayout();
		Label labelNome = new Label("Nome :");
		labelNome.setWidth(COMMON_FIELD_WIDTH);
		fieldNome = new TextField();
		fieldNome.setImmediate(true);
		fieldNome.focus();
		fieldNome.setWidth(COMMON_FIELD_WIDTH);
		horizontalLayout.addComponent(labelNome);
		horizontalLayout.addComponent(fieldNome);
		addComponent(horizontalLayout);
		addComponent(GetButtonFiltrar());
		addComponent(getTableJogadores());
	}
	
	public BeanContainer<Long, Jogador> getBeansJogador(){
		beansJogador = new BeanContainer<Long, Jogador>(Jogador.class);
		beansJogador.setBeanIdProperty("id");
		return beansJogador;
	}
	
	public Table getTableJogadores(){
		tableJogadores.setContainerDataSource(getBeansJogador());
		tableJogadores.setWidth("100%");
		tableJogadores.setSelectable(true);
		tableJogadores.setImmediate(true);
		tableJogadores.setVisibleColumns(new String[] { "nome", "email", "numeroCarteira", "telefone" });
		tableJogadores.setColumnHeaders(new String[] { "Nome", "email", "Numero Carteira", "Telefone" });
		tableJogadores.addListener(new Property.ValueChangeListener() {
			public void valueChange(ValueChangeEvent event) {
				Long id = (Long) tableJogadores.getValue();
				JogadorDAO dao = new JogadorDAO();

				Jogador jogador = dao.recuperar(id);
				try {
					RootComponents.getHorizontalSplitLayout().setSecondComponent(new PanelCadastroJogadores(jogador));
				} catch (Exception e) {
					log.warning(e.getMessage());
					return;
				}
			}
		});
		return tableJogadores;
	}
	
	public Button GetButtonFiltrar(){
		buttonFiltrar = new Button("Filtrar", new Button.ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				FiltroJogador filtro = new FiltroJogador();
				filtro.setNome(((String) fieldNome.getValue()).trim());
				JogadorDAO dao = new JogadorDAO();
				beansJogador = getBeansJogador();
				beansJogador.addAll(dao.listarPorFiltro(filtro));
				tableJogadores.setContainerDataSource(beansJogador);
				tableJogadores.setVisibleColumns(new String[] { "nome", "email", "numeroCarteira", "telefone" });
				tableJogadores.setColumnHeaders(new String[] { "Nome", "email", "Numero Carteira", "Telefone" });
			}
		});
		buttonFiltrar.setClickShortcut(KeyCode.ENTER);
		return buttonFiltrar;
	}

}
